package com.dao;

import java.sql.*;


/**
 * @author hyhWTX
 * @version 1.0
 * @ClassName DBUtils
 * @date 2022年08月11日 19:29
 * @Description: 数据库的操作封装类
 * 实现数据库的基本操作及操作完毕的资源释放
 */
public abstract class DBUtils {
    protected Connection con = null;//连接对象
    protected PreparedStatement pre = null;//预处理对象
    protected ResultSet res = null;//操作结果集

    //    连接数据库
    protected Connection getCon() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc-db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai", "root", "root");
        return con;
    }

    //释放数据库资源
    protected void CloseAll() {
        try {
            if (res != null) {
                res.close();
            }
            if (pre != null) {
                pre.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            con = null;
            res = null;
            pre = null;
        }

    }

    //    实现数据库的基本操作，如增删改查操作
    protected int excut(String sql,Object...params) {

        try {
            //链接数据库
            this.getCon();
            //预处理
            pre = con.prepareStatement(sql);
            //设置SQL语句中？号占位符的值
            //判断SQL语句中是否存在?号占位符
            if (params != null && params.length != 0) {
                //循环设置SQL语句中?号占位符的值
                for (int i = 0; i < params.length; i++) {
                    pre.setObject(i + 1, params[i]);
                }
            }
            return pre.executeUpdate();

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
                //释放数据库资源
                this.CloseAll();
            return 0;
        }
    }
}
